#include "timer.h"
#include <unistd.h>
#include <iostream>
using namespace sylar;

void func(int i)
{
	std::cout << "i: " << i << std::endl;
}

int main(int argc, char const *argv[])
{
	// 创建一个TimerManager对象，用于管理定时器
	std::shared_ptr<TimerManager> manager(new TimerManager());
	std::vector<std::function<void()>> cbs;

	// 测试listExpiredCb超时功能
	{
		// 添加10个定时器，每个定时器的超时时间分别为1秒、2秒、...、10秒
		for(int i = 0; i < 10; i++)
		{
			manager->addTimer((i + 1) * 1000, std::bind(&func, i), false);
		}
		std::cout << "所有定时器已设置完成" << std::endl;

		// 等待5秒后，获取所有已超时的回调函数并执行
		sleep(5);
		manager->listExpiredCb(cbs);
		while(!cbs.empty())
		{
			std::function<void()> cb = *cbs.begin();
			cbs.erase(cbs.begin());
			cb();
		}

		// 再次等待5秒后，获取所有已超时的回调函数并执行
		sleep(5);
		manager->listExpiredCb(cbs);
		while(!cbs.empty())
		{
			std::function<void()> cb = *cbs.begin();
			cbs.erase(cbs.begin());
			cb();
		}			
	}
		
	// 测试循环定时器功能
	{
		// 添加一个循环定时器，每隔1秒触发一次
		manager->addTimer(1000, std::bind(&func, 1000), true);
		int j = 10;
		while(j-- > 0)
		{
			// 每隔1秒获取已超时的回调函数并执行
			sleep(1);
			manager->listExpiredCb(cbs);
			std::function<void()> cb = *cbs.begin();
			cbs.erase(cbs.begin());
			cb();
		}		
	}
	return 0;
}